package jvm.stack;

/**
 * @Author: ideaAdmin
 * TODO: 操作数栈
 * Date: 2022/2/17:18:57
 * Description:
 */

public class OperandStack {
    public static void main(String[] args) {
        byte i = 15;
        int j = 8;
        int k = i + j;
        boolean flag = false;
        //byte short boolean char  都用int型来保存
        //都是以istore来存放
        int a = 8;//使用命令 bipush byte
        int b = 800;//使用命令 sipush short
        OperandStack operandStack = new OperandStack();
        operandStack.numAdd();
    }

    public int getInt() {
        int i = 10;
        int b = 20;
        return i + b;
    }

    public void getIntTest() {
        int anInt = getInt();
    }

    public void numAdd() {
//        //1.
//        int i1 = 10;
//        i1 = i1++;
        //先存入操作数栈 然后放入局部变量表 然后取出操作数栈进行+1 然后存入局部变量表
//
//        int i2 = 10;
//        i2 = ++i2;
        //先存入操作数栈
        //然后存入局部变量表
        //进行+1操作 然后从操作数栈取出 存入局部变量表2的位置


        //2
        int i3 = 10;
        int i4 = i3++;//10
        //存入操作数栈 存入局部变量表1
        //取出操作数组  存入局部变量表2
        //对局部变量表1进行加1
        //

        int i5 = 10;
        int i6 = ++i5;//11

        //3
        int i7 = 10;
        i7 = i7++;

        int i8 = 10;
        i8 = ++i8;

        //4
        int i9 = 10;
        int i10 = i9++ + ++i9;

    }
    /**
        * TODO:当前方法最大深度为8 首先double每个都栈两个 然后 遇到括号都进数栈 再遇到最后的后括号才开始计算
    **/
    public void operandStackDepth(){
        double a = 10;
        double b = 10;
        double c = 10;

        double d = a + (b + c * c);
    }
}
